home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tech Arsenal 1
/
Tech Arsenal (Arsenal Computer).ISO
/
tek-04
/
bipl.zip
/
PROGS.ZIP
/
ZIPSORT.ICN
< prev
Wrap
Text File
|
1992-09-28
|
2KB
|
65 lines
############################################################################
#
# File: zipsort.icn
#
# Subject: Program to sort mailing labels by ZIP code
#
# Author: Ralph E. Griswold
#
# Date: June 10, 1988
#
###########################################################################
#
# This program sorts labels produced by labels in ascending
# order of their postal zip codes.
#
# Option:
#
# The option -d n sets the number of lines per label to n.
# The default is 9. This value must agree with the value used to
# format the labels.
#
# Zip Codes:
#
# The zip code must be the last nonblank string at the
# end of the label. It must consist of digits but may have an
# embedded dash for extended zip codes. If a label does not end
# with a legal zip code, it is placed after all labels with legal
# zip codes. In such a case, an error messages also is written to
# standard error output.
#
############################################################################
#
# Links: options
#
# See also: labels.icn
#
############################################################################
link options
procedure main(args)
local t, a, label, zip, y, lsize, opts
opts := options(args,"d+")
lsize := (0 > integer(opts["d"])) | 9
t := table("")
repeat {
label := ""
every 1 to lsize do
label ||:= read() || "\n" | break break
label ? {
while tab(upto(' ')) do tab(many(' '))
zip := tab(upto('-') | 0)
zip := integer(zip) | write(&errout,"*** illegal zipcode: ",label)
}
t[zip] ||:= label
}
a := sort(t,3)
while get(a) do
writes(get(a))
end